#pragma once
#include"rbtree.h"
namespace zjw
{
	template<class K>
	class set {
		struct SETOFKEY
		{
			const K& operator()(const K& key)
			{

				return key;



			}
		};

	public:
		typedef typename rbtree<K,  K, SETOFKEY>::iterator iterator;
		//typedef typename rbtree<K, const K, SETOFKEY>::con_iterator con_iterator;
		pair<iterator, bool>  insert(const K& key)
		{
			return _st.insert(key);


		}
		iterator begin()
		{
			return _st.begin();

		}

		iterator end()
		{
			return _st.end();


		}
	/*	con_iterator begin() const
		{
			return _st.begin();

		}

		con_iterator end() const
		{
			return  _st.end();


		}*/


	private:
		rbtree<K, K, SETOFKEY>_st;
	};
	//void PrintSet(const set<int>& s)
	//{
	//	for (auto e : s)
	//	{
	//		//e += 1;
	//		cout << e << endl;
	//	}
	//}

	//void test_set()
	//{
	//	set<int> s;
	//	s.insert(4);
	//	s.insert(2);
	//	s.insert(5);
	//	s.insert(15);
	//	s.insert(7);
	//	s.insert(1);
	//	s.insert(5);
	//	s.insert(7);
	//	set<int>::iterator it = s.begin();
	//	while (it != s.end())
	//	{
	//		

	//		cout << *it << endl;
	//		++it;


	//	}
	//	PrintSet(s);
	//}
}

		//set<int>::iterator it = s.begin();
		//while (it != s.end())
		//{
		//	//*it += 5;

		//	cout << *it << " ";
		//	++it;
		//}
		//cout << endl;
	//void testset()
	//{
	//	 set< int>s;
	//	int a[] = { 4, 2, 6, 1, 3, 5, 15, 7, 16,14 };


	//	for (auto e : a)
	//	{
	//		s.insert(e);



	//	}
	//	set<int>::iterator it = s.begin();
	//	while (it != s.end())
	//	{
	//		

	//		cout << *it << endl;
	//		++it;


	//	}
	//}



